A. Technical Field
Embodiments of the invention generally relate to computer memory management, and more particularly, to an apparatus and method of identifying uncommitted memory during an initialization procedure during which memory management is uncontrolled.
B. Background of the Invention
A computer system includes a variety of different type of hardware components, including various adapter cards that may be plugged into the computer system. To ensure proper operation of these hardware components, an initialization routine is required within the computer system to inform the computer about the availability and status of all hardware devices connected to it. A Basic Input Output System (“BIOS”) containing low-level input/output routines is used to initialize these hardware components when power is first applied to the computer or a power-on self test procedure. In the case of adapter cards, BIOS code is usually stored in an option ROM chip on the card(s). The option ROM chip contains a set of program instructions known as an option ROM BIOS or BIOS image. The BIOS image typically includes a core code having a core configuration utility and a user interface.
FIG. 1 shows a typical layout of a system's Random Access Memory or system RAM 100. During the boot process, the BIOS image or BIOS Data 102 is loaded to a reserved area 101 of the memory 100. This reserved or dedicated area 101 is usually between C000 and F000 hexadecimal address range of the system RAM 100 that is the upper memory area and constrains the size of an option ROM that may be loaded. Conventional memory 102 is also located within the memory 100 that may be committed for various uses. For example, very low memory contains interrupt tables and low level code devoted to time-of-day, system hardware, essential system services, and other purposes.
In this limited memory space, a portion of the BIOS image is further implemented to initialize a host adapter(s) or other component associated with the option ROM BIOS. This dedicated memory is often used in chunks of 16 KB (4000h) resulting in memory blocks within the memory space. In certain situations, a BIOS image may inefficiently use memory blocks resulting in uncommitted or empty blocks within the memory space.
Oftentimes, multiple option ROMs are required to be initialized by the computer system resulting in the limited option ROM reserved memory space to become overburdened. In these events, certain hardware elements may boot-up very slowly or not at all because of capacity problems within the option ROM reserved memory space. As a result, the user may not be able to use certain hardware device or peripherals within the computer system or the hardware may not operate properly.
In order to reduce the likelihood of overburdening an option ROM memory space, designers have allocated larger memory sizes to the option ROM memory space. This larger option ROM memory space presents certain inefficiencies and costs within the system. For example, a larger option ROM memory space requires a more extensive configuration utility. In one implementation, the configuration utility may be designed to manage arrays of multiple disk drives such as RAID, as well as normal individual disk drives, which enabled a user to perform several applications including formatting or verifying a drive. The configuration utility also provides an interface to allow the end users to have a direct control on the drives.
The size of a configuration utility for a large option ROM memory space may approach 256K. This larger utility presents memory allocation problems which may affect compilers and other software codes that typically run in the conventional memory space.
Some vendors provide memory space for making memory allocations sufficient to the peripherals, managing conventional memory and creating configuration utilities of different sizes. For example, on certain IBM compatible platforms, Post Memory Management (“PMM”) applications provide this functionality. However, vendors run different versions of the PMM software, which makes it difficult to provide a general request to the system BIOS for managing memory. Further yet, some platforms may still allocate a small amount of memory to BIOS, which may be insufficient for initialization of all the system hardware.
Accordingly, increasing the amount of memory allocated to option ROM memory space introduces inefficiencies within systems and also further increases the cost of providing additional memory.